package com.yusvn.scm.admin.auth;

import com.jfinal.aop.Aop;
import com.yusvn.scm.common.model.SysUser;

/**
 * 管理后台授权帮助类 
 * 判断用户是否有角色或权限等
 * 前端点登录，header中带上token传递账号到后台，后端获取header中的token，先校验token是否过期，
 * 再校验账号密码是否正确，
 * 
 * 在setter.js的ajaxSuccessBefore中判断服务器的response的header中是否有Authorization字段，
 * 有就表示token马上要过期了， 服务端生成了新的token，前端需要把新的token存起来。
 * 
 * @author liugz
 *
 */
public class AdminAuthKit {

	public static final String TOKEN_TYPE = "Bearer";  // token认证类型
    public static final String TOKEN_HEADER_NAME = "Authorization";  // token在header中字段名称
    public static final String TOKEN_PARAM_NAME = "access_token";  // token在参数中字段名称
    
    public static final Long TOKEN_EXPIRE_TIME = 60 * 60 * 24 * 1L;  // token过期时间,单位秒, 默认1天
    //public static final int TOKEN_WILL_EXPIRE = 30;  // token将要过期自动刷新,单位分钟
    //public static final String TOKEN_KEY = "YZ91TGVwGx0EEWgDVtjC0EbS6wlAO4joqABeUGvPX8A=";  // 生成token的key
            
	static AdminAuthService adminAuthSrv = Aop.get(AdminAuthService.class);

	public static final String QX_BBGLQX = "qx_bbglqx";  // BI报表管理权限

	/**
	 * 当前账号是否拥有某些角色
	 */
	public boolean hasRole(String... roleNameArray) {
		SysUser user = AdminAuthInterceptor.getThreadLocalAccount();
		if (user != null && user.isStateOk()) {
			if (adminAuthSrv.isSuperAdmin(user.getUserId()) ||
				adminAuthSrv.hasRole(user.getUserId(), roleNameArray)) {
				return true;
			}
		}

		return false;
	}

	/**
	 * 是否拥有具体某个权限
	 */
	public static boolean hasPermission(String actionKey) {
		SysUser account = AdminAuthInterceptor.getThreadLocalAccount();
		if (account != null && account.isStateOk()) {
			if (	//adminAuthSrv.isSuperAdmin(account.getUserId()) ||
					adminAuthSrv.hasPermission(account.getUserId(), actionKey)) {
				return true;
			}
		}

		return false;
	}
    
}
